package chemtools_logica.LN.SFBean;

import chemtools_logica.BDL.IR.BDL_SFAlmacenRemote;

import chemtools_logica.BDL.IR.BDL_SFGastoRemote;

import chemtools_logica.Beans.GastoBean;

import chemtools_logica.Beans.gastoGraficoBean;

import chemtools_logica.Entidades.Banco;
import chemtools_logica.Entidades.Gasto;

import chemtools_logica.Entidades.Graficogasto;
import chemtools_logica.Entidades.Tipogasto;
import chemtools_logica.Entidades.Usuario;

import chemtools_logica.LN.IL.LN_SFGastoLocal;
import chemtools_logica.LN.IR.LN_SFGastoRemote;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import javax.ejb.EJB;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless(name = "LN_SFGasto", mappedName = "map-LN_SFGasto")
public class LN_SFGastoBean implements LN_SFGastoRemote, LN_SFGastoLocal {
    @Resource
    SessionContext sessionContext;
    @PersistenceContext(unitName = "Chemtools_Logica")
    private EntityManager em;
    
    @EJB
    BDL_SFGastoRemote bDL_SFGastoRemote;

    public List<GastoBean> getAllGastos(){
        List<Gasto> listaEntidad= bDL_SFGastoRemote.getAllGastos();
        List<GastoBean> listaBean = new ArrayList<GastoBean>();
        
        for(Gasto entidad : listaEntidad){
            GastoBean bean = convertEntityToBean(entidad);
            listaBean.add(bean);
        }
        
        return listaBean;
    }
    
    public List<GastoBean> getGastoByFiltro(GastoBean gBean){
        List<Gasto> listaEntidad= bDL_SFGastoRemote.getGastosFiltro(gBean);
        List<GastoBean> listaBean = new ArrayList<GastoBean>();
        
        for(Gasto entidad : listaEntidad){
            GastoBean bean = convertEntityToBean(entidad);
            listaBean.add(bean);
        }
        
        return listaBean;
    }
    
    public void updateGasto(GastoBean bean){
        Gasto entidad = new Gasto();
        entidad = convertBeantoEntity(bean,1);
        bDL_SFGastoRemote.mergeGasto(entidad);
    }
    
    public void addGasto(GastoBean bean){
        Gasto entidad = new Gasto();
        entidad = convertBeantoEntity(bean,2);
        bDL_SFGastoRemote.mergeGasto(entidad);
    }
    
    public List<gastoGraficoBean>chartGasto(){
        List<Graficogasto> lista = bDL_SFGastoRemote.getChart();
        List<gastoGraficoBean> listaBean = new ArrayList<gastoGraficoBean>();
        for(Graficogasto entidad : lista){
            gastoGraficoBean bean = new gastoGraficoBean();
            bean.setAno(entidad.getAno());
            bean.setMes(entidad.getMes());
            bean.setMonto(Integer.parseInt(entidad.getMonto()));
            listaBean.add(bean);
        }
        return listaBean;
    }
    
    public GastoBean convertEntityToBean(Gasto entidad){
        GastoBean bean = new GastoBean();
        
        bean.setComentario(entidad.getComentario());
        bean.setEstado(entidad.getEstado());
        bean.setFecha(entidad.getFecha());
        bean.setIdGastos(entidad.getIdGastos());
        bean.setImagen(entidad.getImagen());
        bean.setMonto(entidad.getMonto());
        bean.setIdBanco(entidad.getBanco().getIdBanco());
        bean.setNombreBanco(entidad.getBanco().getNombre());
        bean.setIdTipoGasto(entidad.getTipogasto().getIdTipoGasto());
        bean.setNombreTipoGasto(entidad.getTipogasto().getDescripcion());
        bean.setIdUsuario(entidad.getUsuario().getIdUsuario());
        bean.setNombrePersona(entidad.getUsuario().getPersona().getApellido()+","+entidad.getUsuario().getPersona().getNombre());
        
        if(entidad.getEstado() == 0){
            bean.setStyleEstado("background-color:#EAB7B7;color:#675a5a;");
        }else{
            bean.setStyleEstado("background-color:#C9E5F6;color:#675a5a;");
        }
        
        return bean;
    }
    
    //  1 = update, 2 = insert
    public Gasto convertBeantoEntity(GastoBean bean, int opc){
        Gasto entidad = new Gasto();
        Usuario entidadUsuario = new Usuario();
        Banco entidadBanco = new Banco();
        Tipogasto entidadtGasto = new Tipogasto();
        
        entidad.setComentario(bean.getComentario());
        entidad.setEstado(bean.getEstado());
        entidad.setFecha(bean.getFecha());
        entidad.setMonto(bean.getMonto());
        entidad.setImagen(bean.getImagen());
        
        entidadUsuario.setIdUsuario(bean.getIdUsuario());
        entidad.setUsuario(entidadUsuario);
        
        entidadBanco.setIdBanco(bean.getIdBanco());
        entidad.setBanco(entidadBanco);
        
        entidadtGasto.setIdTipoGasto(bean.getIdTipoGasto());
        entidad.setTipogasto(entidadtGasto);
        
        if(opc == 1){
            entidad.setIdGastos(bean.getIdGastos());
        }
        
        return entidad;
    }
}
